package javaCode.chapter07.object_;

public class Equals01 {
    public static void main(String[] args) {
        A a = new A();
        A b = a;
        A c = b;
        System.out.println(c == b);
        System.out.println(c == a);

        B bObj = a;
        System.out.println(bObj == a);

        //equals 方法，源码怎么查看.
        "hello".equals("abc");

        /*
        //看看Jdk源码 String类的 equals方法
        //把Object的equals方法重写了，变成了比较两个字符串是否相同

        public boolean equals(Object anObject) {
            if (this == anObject) { //如果是同一一个对象或 地址相同
                return true; //返回true
            }
            if (anObject instanceof String) { //判断类型
                String anotherString = (String)anObject; //向下转型
                int n = value.length;
                if (n == anotherString.value.length) { //如果长度相同
                    char v1[] = value;
                    char v2[] = anotherString.value;
                    int i = 0;
                    while (n-- != 0) { //一个一个字符串进行比较
                        if (v1[i] != v2[i])
                            return false;
                        i++;
                    }
                    return true; //如果两个字符都相等 返回true
                }
            }
            return false; //如果比较的不是字符，则放回false
        }
         */

        //看看Object类的 equals
        /*
        //Object的equals方法 默认比较的就是对象的地址
        public boolean equals(Object obj) {
            return (this == obj);
        }
         */


        /*
        //从源码中可以看到 Integer 也重写了Object的equals方法
        //变成了判断两个值是否相等
        public boolean equals(Object obj) {
            if (obj instanceof Integer) {
                return value == ((Integer)obj).intValue();
            }
            return false;
        }
         */
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1 == integer2); //f 判断对象的地址
        System.out.println(integer1.equals(integer2)); //t 因为重写了equals方法 判断的是两个值是否相等

        String str1 = new String("xzc"); //f
        String str2 = new String("xzc"); //t
        System.out.println(str1 == str2);
        System.out.println(str1.equals(str2));

    }
}

class B{}
class A extends B{}

